<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>169数组reduce方法</title>
</head>

<body>
  <h1>169数组reduce方法</h1>
  <script>
    // 1 forEach() 对数组的每个元素执行一次给定的函数。

    // 2 fliter() 返回给定数组一部分的浅拷贝，其包含通过所提供函数实现的测试的所有元素。

    // 3 map() 返回一个新数组，这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。

    // 4 reduce() 对数组中的每个元素按序执行一个提供的 reducer 函数，每一次运行 reducer 会将先前元素的计算结果作为参数传入，最后将其结果汇总为单个返回值。
    let arr = [1, 3, 5]
    arr.forEach(item => {
      console.log(item)
    })

    let res = arr.filter(item => {
      return item > 3
    })
    console.log(res)

    let res2 = arr.map(item => {
      return item - 1
    })
    console.log(res2)

    let res3 = arr.reduce((a, v) => {
      return Math.max(a, v)
    }, 0)
    console.log(res3)

    console.log(arr) // 证明forEach，map，filter，reduce都不会更改原数组

    // reduce练习
    const nums = [
      {
        name: 'a',
        salary: 111
      },
      {
        name: 'b',
        salary: 222
      },
      {
        name: 'c',
        salary: 333
      }
    ]

    let sum = nums.reduce((a, { salary }) => {
      return a + salary
    }, 0)
    console.log(sum)
  </script>
</body>

</html>